001 /*
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: 2002-10-22
005 * Time: 20:12:14
006 * To change this template use Options | File Templates.
007 */
008
009 package EVolve.util;
010
011 import java.awt.*;
012 import java.util.*;
013
014 public class ColorCache implements Cloneable{
015 private HashMap colorMap;
016 private Random random;
017 private final long seed = 2003213813;
018 private Color[] defaultColors = {
019 new Color(51,153,204), new Color(51,204,153), new Color(153,204,51),new Color(153,51,204),
020 new Color(204,51,153), new Color(204,153,51), new Color(51,204,0),new Color(51,0,204),
021 new Color(204,0,51), new Color(204,51,0), new Color(0,51,204),new Color(0,204,51),
022 new Color(204,0,204), new Color(204,204,0), new Color(0,204,204),new Color(51,153,0),
023 new Color(51,0,153), new Color(153,0,51), new Color(153,51,0),new Color(0,51,153),
024 new Color(0,153,51), new Color(153,204,0), new Color(153,0,204),new Color(0,204,153),
025 new Color(0,153,204), new Color(204,0,153), new Color(204,153,0),new Color(151,255,151),
026 new Color(255,151,151), new Color(151,151,255), new Color(204,204,255),new Color(255,204,204),
027 new Color(204,255,204), new Color(251,151,180), new Color(251,180,151),new Color(151,180,251),
028 new Color(151,251,180), new Color(180,251,151), new Color(180,151,251),new Color(145,244,45),
029 new Color(145,45,244), new Color(45,244,145), new Color(45,145,244),new Color(244,145,45),
030 new Color(244,45,145), new Color(244,145,45), new Color(0,0,255),new Color(255,0,0),
031 new Color(0,255,0), new Color(130,28,247), new Color(130,247,28),new Color(247,28,130),
032 new Color(247,130,28), new Color(28,247,130), new Color(198,130,247),new Color(0,128,255),
033 new Color(0,255,128), new Color(255,128,0), new Color(255,0,128),new Color(128,0,255),
034 new Color(255,128,0), new Color(128,255,0), new Color(187,156,26),new Color(25,250,104)
035 };
036 private int leftColor;
037
038 public ColorCache() {
039 colorMap = new HashMap();
040 leftColor = defaultColors.length -1;
041 random = new Random();
042 random.setSeed(seed);
043 }
044
045 private Color getRandomColor() {
046 int sum = 0;
047 int rand[] = new int[3];
048
049 if (leftColor>=0) {
050 return defaultColors[leftColor--];
051 }
052
053 do {
054 while (sum<70) {
055 for (int i=0; i<rand.length;i++) {
056 rand[i] = 500;
057 while (rand[i]>255) {
058 rand[i] = (int)(random.nextDouble()*10000);
059 }
060 }
061 sum = rand[0] + rand[1] + rand[2];
062 }
063 sum = 0;
064 } while (colorMap.containsValue(new Color(rand[0],rand[1],rand[2])));
065
066 return new Color(rand[0],rand[1],rand[2]);
067 }
068
069 public Color getNextColor(long methodId) {
070 Color color;
071 if (!colorMap.containsKey(new Long(methodId))) {
072 color = getRandomColor();
073 colorMap.put(new Long(methodId),color);
074 return color;
075 }
076 return (Color)colorMap.get(new Long(methodId));
077 }
078
079 public int getKeyFromColor(Color color) {
080 Iterator it = colorMap.keySet().iterator();
081 int methodId = -1;
082
083 while (it.hasNext()) {
084 Long key = (Long)it.next();
085 if (color != ((Color)colorMap.get(key))) continue;
086
087 methodId = key.intValue();
088 return methodId;
089 }
090 return methodId;
091 }
092
093 public Object clone() {
094 ColorCache o = null;
095 try {
096 o = (ColorCache)super.clone();
097 } catch (CloneNotSupportedException e) {
098 e.printStackTrace();
099 return null;
100 }
101 o.colorMap = (HashMap)colorMap.clone();
102 o.defaultColors = new Color[defaultColors.length];
103 for (int i=0; i<defaultColors.length; i++)
104 o.defaultColors[i] = defaultColors[i];
105 return o;
106 }
107 }